package v1

import (
	"saas-app/app/dao"
	"saas-app/app/model"
	"saas-app/app/service"
	"saas-app/library/response"

	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/net/ghttp"
)

func GetRoleList(r *ghttp.Request) {
	data := service.RoleService().GetRoleList()
	response.JsonExit(r, 0, "角色列表", data)
}

func CreateRole(r *ghttp.Request) {
	role := model.Roles{}
	role.RoleName = r.GetFormString("role_name")
	id, err := dao.Roles.InsertAndGetId(&role)

	if err != nil {
		panic(err)
	}
	response.JsonExit(r, 0, "添加成功", id)
}

func PowerList(r *ghttp.Request) {
	data := service.RoleService().GetPowerTree()
	response.JsonExit(r, 0, "权限树", data)
}

// 修改权限组 权限
func UpdateRolePower(r *ghttp.Request) {

	checked := r.GetFormArray("checked")
	role_id := r.GetFormInt("role_id")
	ids := service.RoleService().GetIdsByCodes(checked)

	tx, err := g.DB().Begin()

	if err != nil {
		panic(err)
	}

	_, err = dao.RolePower.Where("role_id", role_id).Delete()

	if err != nil {
		tx.Rollback()
		panic(err)
	}

	datas := g.List{}

	for _, id := range ids {
		data := map[string]interface{}{
			"role_id":  role_id,
			"power_id": id,
		}
		datas = append(datas, data)
	}

	_, err = dao.RolePower.Data(datas).Save()

	if err != nil {
		tx.Rollback()
		panic(err)
	}

	err = tx.Commit()

	if err != nil {
		tx.Rollback()
		panic(err)
	}
	response.JsonExit(r, 0, "保存成功", nil)
}

func UpdateRole(r *ghttp.Request) {

	role_name := r.GetFormString("role_name")
	role_id := r.GetFormInt("role_id")

	_, err := dao.Roles.Data("role_name", role_name).Where("id", role_id).Update()

	if err != nil {
		panic(err)
	}
	response.JsonExit(r, 0, "修改成功", nil)
}

func RoleDelete(r *ghttp.Request) {

	role_id := r.GetFormInt("role_id")
	result, err := dao.RoleUser.Where("role_id", role_id).All()

	if err != nil {
		panic(err)
	}

	list := result.List()

	if len(list) > 0 {
		response.Error("当前权限组下有用户，暂无法删除")
	}

	_, err = dao.Roles.Where("id", role_id).Delete()

	if err != nil {
		panic(err)
	}

	response.JsonExit(r, 0, "删除成功", nil)
}
